
// Geohash 解决二维、三维向量哈希编码，且实现范围查找的问题，引用场景：2D、3D游戏、地图等场景。
// Geohash 是一种将地理坐标（经度和纬度）编码成字符串的地理编码系统。
// 它通过递归地将地球表面划分为更小的矩形区域，每个区域都有一个唯一的 Geohash 编码。
// Geohash 编码的长度直接影响其表示的区域的精度。
// Geohash 关键的性质：附近的点都有一个公共的前缀，公共前缀的长度越长，两个点距离越近。
// 所以Geohash最适合查找附近的人。

// 假定二维空间的最大范围0~65536
// 精度64M
#define L_MAX 65536
// 经过二分法得出的奇点，根据比较奇点来进行hash编码
static int16_t g_lhash[] = {32678,16384,8192,4096,2048,1024,512,256,128,64};
// 获取20位的hash编码，最大1M宽度存储空间
static int geo_hash(int16_t x, int16_t y)
{
	int hash = 0;
	for (int i = 0; i < sizeof(g_lhash) / sizeof(g_lhash[0]); i++) {
		hash <<= 1;
		x >>= 1;
		if (x >= g_lhash[i]) {
			hash += 1;
		}
		y >>= 1;
		hash <<= 1;
		if (y >= g_lhash[i]) {
			hash += 1;
		}
	}
	return hash;
}